package com.fingard.dsp.bank.directbank.hxb01;

import java.text.SimpleDateFormat;
import java.util.Date;

import com.fingard.constant.Format;
import com.fingard.dsp.bank.directbank.bankInterface.IBatPayRec;
import com.fingard.dsp.bank.reqrespobj.batpayrec.ReqBatPayRec;
import com.fingard.dsp.bank.reqrespobj.batpayrec.ReqQryBatPayRec;
import com.fingard.dsp.bank.reqrespobj.batpayrec.RetAtsBatPayRec;
import com.fingard.dsp.bank.reqrespobj.batpayrec.RetAtsQryBatPayRec;
import com.fingard.dsp.bank.reqrespobj.batpayrec.detail.RetAtsBatPayRecDetail;
import com.fingard.text.StringHelper;

public class HXB01BatPayRec extends HXB01Base implements IBatPayRec{

	@Override
	public RetAtsBatPayRec d_1988_BatPay(ReqBatPayRec p_req1988) throws Exception {
		// TODO Auto-generated method stub
		String CommandCode=p_req1988.reqHeader.commandCode;
		if("198801".equals(CommandCode)){
			return d_198801_BatPay(p_req1988);
		}
		else{
			return d_198802_BatPay(p_req1988);
		}
		
	}
	//	对公向对私批量转账（xhj3006）
	public RetAtsBatPayRec d_198801_BatPay(ReqBatPayRec p_req1988) throws Exception {
		
		 RetAtsBatPayRec retAts = new RetAtsBatPayRec(p_req1988.reqHeader);
		 try {
			String tran_code="xhj3006";// tran_code	交易代码
			String custName=p_req1988.ownActName;// custName	客户名称
			String AcctNo=p_req1988.ownAct;// AcctNo	付款账号
			String totalAmount=p_req1988.totalAmt;// totalAmount	总金额
			String totalNumber=p_req1988.totalNum;// totalNumber	总笔数
			String batchNo=p_req1988.reqBatchNO;// batchNo	批次号
			String cyc_str="";// cyc_str	
			StringBuilder stringBuilder=new StringBuilder();
			stringBuilder.append(tran_code).append("#");
			stringBuilder.append(custName).append("#");
			stringBuilder.append(AcctNo).append("#");
			stringBuilder.append(totalAmount).append("#");
			stringBuilder.append(totalNumber).append("#");
			stringBuilder.append(batchNo).append("#");
			
			
			
			StringBuilder sbContent=new StringBuilder();
			
			int num=1;
			while(p_req1988.readRecord()){
				/*序号|卡号|名称|金额|摘要|手机号|备注1|备注2|备注3|*/
				String number=String.valueOf(num);
				String act=p_req1988.readedDetail.recAct;
				String name=p_req1988.readedDetail.recName;
				String ammount=p_req1988.readedDetail.payAmount;
				String summary=p_req1988.readedDetail.askNumber;
				String cellPhone=p_req1988.readedDetail.cellPhone;
				String reqReserve1=p_req1988.readedDetail.useType;
				String reqReserve2="";
				String reqReserve3="";
				sbContent.append(number).append("|");
				sbContent.append(act).append("|");
				sbContent.append(name).append("|");
				sbContent.append(ammount).append("|");
				sbContent.append(summary).append("|");
				sbContent.append(cellPhone).append("|");
				sbContent.append(reqReserve1).append("|");
				sbContent.append(reqReserve2).append("|");
				sbContent.append(reqReserve3).append("|");
				sbContent.append("#");
				num++;
			}
			cyc_str=sbContent.toString();
			stringBuilder.append(cyc_str);
			stringBuilder.append("@@@@");
			WriteBankLogLn("发送给银行的报文："+stringBuilder.toString());
			
			String[] tmpRetStr = sendToBank(stringBuilder.toString());
			if(tmpRetStr[0].length() == 0){
				WriteBankLogStep3("银行返回的报文："+tmpRetStr[1]);
				String[] enCode=tmpRetStr[1].split("#");
				String respCode=enCode[0];
				if("000000".equals(respCode)){
					String reqSeqID=enCode[1];
					retAts.respCode="0";
					retAts.respInfo="交易提交成功";
					retAts.reqSeqID=reqSeqID;
					retAts.payInfoCode=respCode;
					retAts.transState=respCode;
				}
				else{
					retAts.respCode="0";
					retAts.respInfo=convertRespToBank(respCode);
					retAts.payInfoCode=respCode;
					retAts.transState=respCode;
				}
			}
			else{
				retAts.respCode = "-1";
				retAts.respInfo = tmpRetStr[1];
			}
			
		} catch (Exception ex) {
			// TODO: handle exception
			ex.printStackTrace();
			retAts.respCode = "-1";
			retAts.respInfo = ex.getMessage();
			WriteBankLogLn(ex);
		}
		 if (retAts.respCode.equals("-1") && StringHelper.isNullOrEmpty(retAts.reqSeqID)) {
             retAts.reqSeqID = p_req1988.reqBatchNO;
         }
         retAts.writeRetToATS();
         return retAts;
	}
	
	//	跨行对公向对私转账（xhj2001）
	public RetAtsBatPayRec d_198802_BatPay(ReqBatPayRec p_req1988) throws Exception {
		RetAtsBatPayRec retAts = new RetAtsBatPayRec(p_req1988.reqHeader);
		try {
			
			String tran_code="xhj2001";//tran_code	交易代码			xhj2001
			String custName=p_req1988.ownActName;//custName	经办人姓名		10	
			String batchNo=p_req1988.reqBatchNO;//batchNo	批次号			
			String AcctNo=p_req1988.ownAct;//AcctNo	付款账号		22	
			String amount=p_req1988.totalAmt;//amount	总金额		16	
			String sendNumber=p_req1988.totalNum;//sendNumber	记录数		6	
			String summary="";//summary	摘要		20	
			String cyc_str="";//cyc_str	循环体			
			StringBuilder stringBuilder=new StringBuilder();
			stringBuilder.append(tran_code).append("#");
			stringBuilder.append(custName).append("#");
			stringBuilder.append(batchNo).append("#");
			stringBuilder.append(AcctNo).append("#");
			stringBuilder.append(amount).append("#");
			stringBuilder.append(sendNumber).append("#");
			stringBuilder.append(summary).append("#");
			
			
			StringBuilder sbContent=new StringBuilder();
			int num=1;
			while(p_req1988.readRecord()){
				//序号|收款清算行行号|收款账号|收款户名|业务类型编码|业务种类编码|附言|金额|备注|	
				String number=String.valueOf(num);
				String cnapsCode=p_req1988.readedDetail.cnapsCode;
				String recAct=p_req1988.readedDetail.recAct;
				String recName=p_req1988.readedDetail.recName;
				
				String useType=p_req1988.readedDetail.useType;
				
				String businessCategoryCoding=getBankConfig().getMapValueByKey("businessCategoryCoding", useType);//业务种类编码
				String busyCode=getBankConfig().getMapValueByKey("busyCode", businessCategoryCoding);//业务类型编码
				
				String statement="";//附言
				String payamount=p_req1988.readedDetail.payAmount;
				String memo=p_req1988.readedDetail.memo;
				sbContent.append(number).append("|");
				sbContent.append(cnapsCode).append("|");
				sbContent.append(recAct).append("|");
				sbContent.append(recName).append("|");
				sbContent.append(busyCode).append("|");
				sbContent.append(businessCategoryCoding).append("|");
				sbContent.append(statement).append("|");
				sbContent.append(payamount).append("|");
				sbContent.append(memo).append("|");
				sbContent.append("#");
				num++;
			}
			cyc_str=sbContent.toString();
			stringBuilder.append(cyc_str);
			stringBuilder.append("@@@@");
			WriteBankLogLn("发送给银行的报文："+stringBuilder.toString());
			String[] tmpRetStr = sendToBank(stringBuilder.toString());
			if(tmpRetStr[0].length() == 0){
				WriteBankLogStep3("银行返回的报文："+tmpRetStr[1]);
				String[] enCode=tmpRetStr[1].split("#");
				String respCode=enCode[0];
				if("000000".equals(respCode)){
					String reqSeqID=enCode[1];
					retAts.respCode="0";
					retAts.respInfo="交易提交成功";
					retAts.reqSeqID=reqSeqID;
					retAts.payInfoCode=respCode;
					retAts.transState=respCode;
				}
				else{
					retAts.respCode="0";
					retAts.respInfo=convertRespToBank(respCode);
					retAts.transState=respCode;
					retAts.payInfoCode=respCode;
				}
			}
			else{
				retAts.respCode = "-1";
				retAts.respInfo = tmpRetStr[1];
			}
			
			
		} catch (Exception ex) {
			// TODO: handle exception
			ex.printStackTrace();
			retAts.respCode = "-1";
			retAts.respInfo = ex.getMessage();
			WriteBankLogLn(ex);
		}
		 if (retAts.respCode.equals("-1") && StringHelper.isNullOrEmpty(retAts.reqSeqID)) {
             retAts.reqSeqID = p_req1988.reqBatchNO;
         }
         retAts.writeRetToATS();
         return retAts;
	}
	
	@Override
	public RetAtsQryBatPayRec d_1998_QryBatPay(ReqQryBatPayRec p_req1998) throws Exception {
		RetAtsQryBatPayRec retAts = new RetAtsQryBatPayRec(p_req1998.reqHeader);
		try {
			String tran_code="xhj3007";//tran_code	交易代码			xhj3007
			String AcctNo=p_req1998.ownAct;//AcctNo	付款账号		32
			String date=Format.Date8Format.format(p_req1998.getBgnDateTime());//Date	录入日期		8
			String FlowNo=p_req1998.reqBatchNO;//FlowNo	企业端流水号		20
			StringBuilder stringBuilder=new StringBuilder();
			stringBuilder.append(tran_code).append("#");
			stringBuilder.append(AcctNo).append("#");
			stringBuilder.append(date).append("#");
			stringBuilder.append(FlowNo).append("#");
			stringBuilder.append("@@@@");
			String[] tmpStrRet = sendToBank(stringBuilder.toString());
			if(tmpStrRet[0].length()==0){
				String[] totalLine=tmpStrRet[1].split("#");
				RetAtsBatPayRecDetail tmpRetDetail = new RetAtsBatPayRecDetail();
				if("000000".equals(totalLine[0])){
					retAts.respCode="0";
					retAts.respInfo="交易提交成功";
					retAts.payInfoCode=totalLine[0];
					retAts.transState=totalLine[0];
					retAts.reqSeqID = p_req1998.reqBatchNO;
					int i=7;
					while(i<totalLine.length-2){
						String[] enCode=totalLine[i].split("\\|");
						//序号|卡号|名称|金额|摘要|成功/失败标志(01:成功；09:失败)|失败原因|备注1|备注2|备注3|
						String act=enCode[1];
						String actname=enCode[2];
						String amount=enCode[3];
						String askNumber=enCode[4];
						String respcode=enCode[5];
						String respInfo=enCode[6];
						tmpRetDetail.result="0+"+respcode;
						tmpRetDetail.payInfoCode=respInfo;
						tmpRetDetail.memo = respInfo;
						tmpRetDetail.payAct=p_req1998.ownAct;
						tmpRetDetail.postScript=askNumber;
						tmpRetDetail.recAct=act;
						tmpRetDetail.recName=actname;
						tmpRetDetail.payAmount=amount;
						retAts.writeRetDetail(tmpRetDetail);
						i++;
					}
				}
				else{
					retAts.respCode="0";
					retAts.respInfo=convertRespToBank(totalLine[0]);
					retAts.payInfoCode=totalLine[0];
					retAts.transState=totalLine[0];
				}
			}
			else {
				retAts.respCode = "-1";
				retAts.respInfo = tmpStrRet[1];
			}

		} catch (Exception ex) {
			retAts.respCode = "-1";
			retAts.respInfo = ex.getMessage();
			ex.printStackTrace();
			WriteBankLogLn(ex);
		}
		if (retAts.respCode.equals("-1") && StringHelper.isNullOrEmpty(retAts.reqSeqID)) {
			retAts.reqSeqID = p_req1998.reqBatchNO;
		}
		if (retAts.respCode.equals("-1")) {
			retAts.writeBeforeDetail();
		}
		retAts.writeAfterDetail();
		return retAts;
	}


	@Override
	public RetAtsBatPayRec d_9188_BatPay(ReqBatPayRec p_req9188) throws Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public RetAtsQryBatPayRec d_9198_QryBatPay(ReqQryBatPayRec p_req9198) throws Exception {
		// TODO Auto-generated method stub
		return null;
	}

}
